using System;
using System.Collections.Generic;
using System.Text;

namespace SharpMud.Terminal
{
    /// <summary>
    /// This interface encapsulates mechanisms for writing output to a terminal
    /// </summary>
	public interface IOutputTerminal
	{
        /// <summary>
        /// Make the terminal beep
        /// </summary>
        void Beep();
        /// <summary>
        /// Clear the terminal screen
        /// </summary>
        void Clear();
        /// <summary>
        /// Reset the terminal's foreground and background colors to their default values
        /// </summary>
        void ResetColor();

        /// <summary>
        /// Write a string of text to the terminal
        /// </summary>
        void Write(string value);
        /// <summary>
        /// Write a text character to the terminal
        /// </summary>
        void Write(char value);
        /// <summary>
        /// Write an array of text characters to the terminal
        /// </summary>
        void Write(char[] buffer);
        /// <summary>
        /// Write text characters to the terminal, from the given buffer
        /// </summary>
        void Write(char[] buffer, int start, int length);
        /// <summary>
        /// Write a text character to the terminal, appended by a newline
        /// </summary>
        void WriteLine(char value);
        /// <summary>
        /// Write a string of text to the terminal, appended by a newline
        /// </summary>
        void WriteLine(string value);
        /// <summary>
        /// Write an array of text characters to the terminal, appended by a newline
        /// </summary>
        void WriteLine(char[] buffer);
        /// <summary>
        /// Write text characters to the terminal, from the given buffer, appended by a newline
        /// </summary>
        void WriteLine(char[] buffer, int start, int length);
        /// <summary>
        /// Write a newline to the terminal
        /// </summary>
        void WriteLine();

        /// <summary>
        /// Gets and sets the background color of text that is written to the terminal
        /// </summary>
        TerminalColor BackgroundColor { get;set;}
        /// <summary>
        /// Gets and sets the foreground color of text that is written to the terminal
        /// </summary>
        TerminalColor ForegroundColor { get;set;}

        /// <summary>
        /// Gets and sets the encoding for data that is to be written to the terminal
        /// </summary>
        System.Text.Encoding OutputEncoding { get;set;}
	}


}
